﻿using ProyectoDeTesis.Controladores;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace ProyectoDeTesis.Vistas
{
    public partial class AsignarPrivilegio : Form
    {
        private int idPerfilSeleccionado;
        private PerfilController perfilController = new PerfilController();
        private PantallaController pantallaController = new PantallaController();
        private List<ComponentePantalla> listaComponentePantalla = new List<ComponentePantalla>();
        private ProyectoDeTesis.Perfil perfil;       
        private Pantalla pantalla;
        private int pantalla_id = 6;

        public AsignarPrivilegio()
        {
            InitializeComponent();
        }

        public AsignarPrivilegio(int idPerfilSeleccionado)
        {
            InitializeComponent();
            // TODO: Complete member initialization
            this.idPerfilSeleccionado = idPerfilSeleccionado;
            this.perfil = perfilController.CargarPerfilxId(this.idPerfilSeleccionado);
            lblTitulo.Text += this.perfil.nombre;

            if (perfil.privilegiosAceptados == 1)
            {
                listaComponentePantalla = perfilController.obtenerComponentesPantalla(this.perfil);
                cargarComponentes(this.listaComponentePantalla);
            }

            pantalla = pantallaController.buscarPantallaxId(pantalla_id);

            //establecerVisibilidad();
        }

        private void establecerVisibilidad()
        {

        }

        private void cargarComponentes(List<ComponentePantalla> list)
        {
            foreach (ComponentePantalla c in list)
            {
                switch (c.id)
                { 
                    case 1:
                        cbkSeguridad.Checked = c.visible == 1;
                        break;
                    case 2:
                        cbkPlanDeVuelo.Checked = c.visible == 1;
                        break;
                    case 3:
                        cbkPuertaDeEmbarque.Checked = c.visible == 1;
                        break;
                    case 4:
                        cbkAsignacionDeVuelos.Checked = c.visible == 1;
                        break;
                    case 5:
                        cbkReporte.Checked = c.visible == 1;
                        break;
                }
            }
        }

        private void BtnCancelar_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void BtnGuardar_Click(object sender, EventArgs e)
        {
            FormAceptar form = new FormAceptar();
            form.ShowDialog(this);
        }

        private void BtnCancel_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void BtnAceptar_Click(object sender, EventArgs e)
        {
            if (this.perfil.privilegiosAceptados == 0)
            {
                perfilController.crearPantallas(this.perfil);
                this.listaComponentePantalla = crearListaBotones(this.perfil);
                perfilController.crearComponentesPantalla(this.listaComponentePantalla);
                this.perfil.privilegiosAceptados = 1;
                perfilController.modificarPerfil(this.perfil);
            }
            else
            {
                setComponentes(this.listaComponentePantalla);
                perfilController.modificarComponentesPantalla(this.listaComponentePantalla);
            }

            FormAceptar form = new FormAceptar("Se asignaron los roles exitosamente.");
            form.ShowDialog(this);
            this.Dispose();
        }

        private void setComponentes(List<ComponentePantalla> list)
        {
            foreach (ComponentePantalla c in list)
            {
                switch (c.id)
                { 
                    case 1:
                        c.visible = Convert.ToInt32(cbkSeguridad.Checked);
                        break;
                    case 2:
                        c.visible = Convert.ToInt32(cbkPlanDeVuelo.Checked);
                        break;
                    case 3:
                        c.visible = Convert.ToInt32(cbkPuertaDeEmbarque.Checked);
                        break;
                    case 4:
                        c.visible = Convert.ToInt32(cbkAsignacionDeVuelos.Checked);
                        break;
                    case 5:
                        c.visible = Convert.ToInt32(cbkReporte.Checked);
                        break;
                }
            }
        }

        private List<ComponentePantalla> crearListaBotones(ProyectoDeTesis.Perfil perfile)
        {
            List<ComponentePantalla> listaComponentes = new List<ComponentePantalla>();            
            ComponentePantalla componente = new ComponentePantalla();
            
            // Pantalla Principal
            pantalla = pantallaController.buscarPantallaxId(1);
            componente.codigo = 1;
            componente.perfil_id = perfil.id;
            componente.pantalla_id = pantalla.id;
            componente.nombre = "Seguridad";
            componente.visible = Convert.ToInt32(cbkSeguridad.Checked);
            componente.modificable = Convert.ToInt32(cbkSeguridad.Checked);

            listaComponentes.Add(componente);
        
            componente = new ComponentePantalla();

            componente.codigo = 2;
            componente.perfil_id = perfil.id;
            componente.pantalla_id = pantalla.id;
            componente.nombre = "Plan de Vuelo";
            componente.visible = Convert.ToInt32(cbkPlanDeVuelo.Checked);
            componente.modificable = Convert.ToInt32(cbkPlanDeVuelo.Checked);

            listaComponentes.Add(componente);

            componente = new ComponentePantalla();

            componente.codigo = 3;
            componente.perfil_id = perfil.id;
            componente.pantalla_id = pantalla.id;
            componente.nombre = "Puerta de Embarque";
            componente.visible = Convert.ToInt32(cbkPuertaDeEmbarque.Checked);
            componente.modificable = Convert.ToInt32(cbkPuertaDeEmbarque.Checked);

            listaComponentes.Add(componente);

            componente = new ComponentePantalla();

            componente.codigo = 4;
            componente.perfil_id = perfil.id;
            componente.pantalla_id = pantalla.id;
            componente.nombre = "Asignación de Vuelos";
            componente.visible = Convert.ToInt32(cbkAsignacionDeVuelos.Checked);
            componente.modificable = Convert.ToInt32(cbkAsignacionDeVuelos.Checked);

            listaComponentes.Add(componente);

            componente = new ComponentePantalla();

            componente.codigo = 5;
            componente.perfil_id = perfil.id;
            componente.pantalla_id = pantalla.id;
            componente.nombre = "Reporte";
            componente.visible = Convert.ToInt32(cbkReporte.Checked);
            componente.modificable = Convert.ToInt32(cbkReporte.Checked);

            listaComponentes.Add(componente);

            // Personal
            pantalla = pantallaController.buscarPantallaxId(7);
            componente = new ComponentePantalla();

            componente.codigo = 11;
            componente.perfil_id = perfil.id;
            componente.pantalla_id = pantalla.id;
            componente.nombre = "Personal";
            componente.visible = Convert.ToInt32(cbkPersonal.Checked);
            componente.modificable = Convert.ToInt32(cbkPersonal.Checked);

            listaComponentes.Add(componente);

            //Perfil
            pantalla = pantallaController.buscarPantallaxId(3);
            componente = new ComponentePantalla();

            componente.codigo = 12;
            componente.perfil_id = perfil.id;
            componente.pantalla_id = pantalla.id;
            componente.nombre = "Perfil";
            componente.visible = Convert.ToInt32(cbkPerfil.Checked);
            componente.modificable = Convert.ToInt32(cbkPerfil.Checked);

            listaComponentes.Add(componente);

            //Auditoria
            pantalla = pantallaController.buscarPantallaxId(10);
            componente = new ComponentePantalla();

            componente.codigo = 13;
            componente.perfil_id = perfil.id;
            componente.pantalla_id = pantalla.id;
            componente.nombre = "Auditoría";
            componente.visible = Convert.ToInt32(cbkAuditoria.Checked);
            componente.modificable = Convert.ToInt32(cbkAuditoria.Checked);

            listaComponentes.Add(componente);

            //Lectura de Vuelos
            pantalla = pantallaController.buscarPantallaxId(12);
            componente = new ComponentePantalla();

            componente.codigo = 21;
            componente.perfil_id = perfil.id;
            componente.pantalla_id = pantalla.id;
            componente.nombre = "Lectura de Vuelos";
            componente.visible = Convert.ToInt32(cbkLecturaDeVuelos.Checked);
            componente.modificable = Convert.ToInt32(cbkLecturaDeVuelos.Checked);

            listaComponentes.Add(componente);

            //Administrar Vuelos
            pantalla = pantallaController.buscarPantallaxId(13);
            componente = new ComponentePantalla();

            componente.codigo = 21;
            componente.perfil_id = perfil.id;
            componente.pantalla_id = pantalla.id;
            componente.nombre = "Administrar Vuelos";
            componente.visible = Convert.ToInt32(cbkLecturaDeVuelos.Checked);
            componente.modificable = Convert.ToInt32(cbkLecturaDeVuelos.Checked);

            listaComponentes.Add(componente);

  /*      
            // Pantalla Seguridad
            idPantalla = 2;
            pantalla = pantallaController.buscarPantallaxId(idPantalla);
        
            componente = new componente_pantalla();
            componente.cargar(11, perfil, pantalla, "Administrar Usuarios", cbkAdministrarUsuarios.isSelected(), cbkAdministrarUsuarios.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(12, perfil, pantalla, "Administrar Perfiles", cbkAdministrarPerfiles.isSelected(), cbkAdministrarPerfiles.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(13, perfil, pantalla, "Administrar Roles", cbkAdministrarRoles.isSelected(), cbkAdministrarRoles.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(14, perfil, pantalla, "Ver Auditoria", cbkVerAuditoria.isSelected(), cbkVerAuditoria.isSelected());
            listaComponentes.add(componente);
        
            // Pantalla Administrar Usuarios
            idPantalla = 3;
            pantalla = pantallaController.buscarPantallaxId(idPantalla);
        
            componente = new componente_pantalla();
            componente.cargar(111, perfil, pantalla, "Nuevo Usuario", cbkNuevoUsuario.isSelected(), cbkNuevoUsuario.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(112, perfil, pantalla, "Modificar Usuario", cbkModificarUsuario.isSelected(), cbkModificarUsuario.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(113, perfil, pantalla, "Habilitar Usuario", cbkHabilitarUsuario.isSelected(), cbkHabilitarUsuario.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(114, perfil, pantalla, "Deshabilitar Usuario", cbkDeshabilitarUsuario.isSelected(), cbkDeshabilitarUsuario.isSelected());
            listaComponentes.add(componente);
        
            // Pantalla Nuevo Usuario
            idPantalla = 4;
            pantalla = pantallaController.buscarPantallaxId(idPantalla);
        
            componente = new componente_pantalla();
            componente.cargar(1111, perfil, pantalla, "Aceptar Registro de Usuario", cbkAceptarRegistroUsuario.isSelected(), cbkAceptarRegistroUsuario.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(1112, perfil, pantalla, "Cancelar Registro de Usuario", cbkCancelarRegistroUsuario.isSelected(), cbkCancelarRegistroUsuario.isSelected());
            listaComponentes.add(componente);
        
            // Pantalla Modificar Usuario
            idPantalla = 5;
            pantalla = pantallaController.buscarPantallaxId(idPantalla);
        
            componente = new componente_pantalla();
            componente.cargar(1121, perfil, pantalla, "Aceptar Modificación de Usuario", cbkAceptarModificacionUsuario.isSelected(), cbkAceptarModificacionUsuario.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(1122, perfil, pantalla, "Cancelar Modificación de Usuario", cbkCancelarModificacionUsuario.isSelected(), cbkCancelarModificacionUsuario.isSelected());
            listaComponentes.add(componente);
        
            // Pantalla Administrar Perfiles
            idPantalla = 6;
            pantalla = pantallaController.buscarPantallaxId(idPantalla);
        
            componente = new componente_pantalla();
            componente.cargar(121, perfil, pantalla, "Nuevo Perfil", cbkNuevoPerfil.isSelected(), cbkNuevoPerfil.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(122, perfil, pantalla, "Modificar Perfil", cbkModificarPerfil.isSelected(), cbkModificarPerfil.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(123, perfil, pantalla, "Asignar Privilegios", cbkAsignarPrivilegios.isSelected(), cbkAsignarPrivilegios.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(124, perfil, pantalla, "Habilitar Perfil", cbkHabilitarPerfil.isSelected(), cbkHabilitarPerfil.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(125, perfil, pantalla, "Deshabilitar Perfil", cbkDeshabilitarPerfil.isSelected(), cbkDeshabilitarPerfil.isSelected());
            listaComponentes.add(componente);
        
            // Pantalla Nuevo Perfil
            idPantalla = 7;
            pantalla = pantallaController.buscarPantallaxId(idPantalla);
        
            componente = new componente_pantalla();
            componente.cargar(1211, perfil, pantalla, "Aceptar Registro de Perfil", cbkAceptarRegistroPerfil.isSelected(), cbkAceptarRegistroPerfil.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(1212, perfil, pantalla, "Cancelar Registro de Perfil", cbkCancelarRegistroPerfil.isSelected(), cbkCancelarRegistroPerfil.isSelected());
            listaComponentes.add(componente);
        
            // Pantalla Modificar Perfil
            idPantalla = 8;
            pantalla = pantallaController.buscarPantallaxId(idPantalla);
        
            componente = new componente_pantalla();
            componente.cargar(1221, perfil, pantalla, "Aceptar Modificación de Perfil", cbkAceptarModificacionPerfil.isSelected(), cbkAceptarModificacionPerfil.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(1222, perfil, pantalla, "Cancelar Modificación de Perfil", cbkCancelarModificacionPerfil.isSelected(), cbkCancelarModificacionPerfil.isSelected());
            listaComponentes.add(componente);
        
            // Pantalla Asignar Privilegioss
            idPantalla = 9;
            pantalla = pantallaController.buscarPantallaxId(idPantalla);
        
            componente = new componente_pantalla();
            componente.cargar(1231, perfil, pantalla, "Aceptar Asignación de Privilegios", cbkAceptarAsignacionPrivilegios.isSelected(), cbkAceptarAsignacionPrivilegios.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(1232, perfil, pantalla, "Cancelar Asignación de Privilegios", cbkCancelarAsignacionPrivilegios.isSelected(), cbkCancelarAsignacionPrivilegios.isSelected());
            listaComponentes.add(componente);
        
            // Pantalla Mantenimiento Mapas
            idPantalla = 10;
            pantalla = pantallaController.buscarPantallaxId(idPantalla);
        
            componente = new componente_pantalla();
            componente.cargar(41, perfil, pantalla, "Nuevo Mapa", cbkNuevoMapa.isSelected(), cbkNuevoMapa.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(42, perfil, pantalla, "Mostrar Mapa", cbkMostrarMapa.isSelected(), cbkMostrarMapa.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(43, perfil, pantalla, "Asignar Calles", cbkAsignarCalles.isSelected(), cbkAsignarCalles.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(44, perfil, pantalla, "Asignar Semaforos", cbkAsignarSemaforos.isSelected(), cbkAsignarSemaforos.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(45, perfil, pantalla, "Habilitar Mapa", cbkHabilitarMapa.isSelected(), cbkHabilitarMapa.isSelected());
            listaComponentes.add(componente);
        
            componente = new componente_pantalla();
            componente.cargar(46, perfil, pantalla, "Desahabilitar Mapa", cbkDeshabilitarMapa.isSelected(), cbkDeshabilitarMapa.isSelected());
            listaComponentes.add(componente); */
                       
            return listaComponentes;
        }

        private void BtnAceptar_MouseEnter(object sender, EventArgs e)
        {
            this.BtnAceptar.BackColor = Color.FromArgb(135, 206, 255);
        }

        private void BtnCancel_MouseEnter(object sender, EventArgs e)
        {
            this.BtnAceptar.BackColor = Color.FromArgb(135, 206, 255);
        }
    }
}
